#include "stream_gst_init.h"
#include <gst/gst.h>
#include "base_log.h"

namespace El {
namespace StreamServer {

StreamGst &StreamGst::GetInstance()
{
    static StreamGst instance;
    return instance;
}

bool StreamGst::Start()
{
    // 初始化GStreamer前设置环境变量以优化内存使用
    setenv("GST_DEBUG", "2", 1);               // 减少调试输出
    setenv("GST_GL_MALLOC_HEURISTIC", "1", 1); // 优化GL内存分配
    setenv("GST_REGISTRY_UPDATE", "no", 1);    // 避免注册表更新

    // 限制GStreamer线程池大小，适应嵌入式设备
    g_setenv("GST_THREAD_POOL_MAX", "2", TRUE);

    // 减少GStreamer内存分配
    g_setenv("GST_BUFFER_POOL_MAX_SIZE", "8", TRUE);

    gst_init(nullptr, nullptr);

    LOG_INFO("gst started");
    return true;
}

void StreamGst::Stop()
{
    gst_deinit();
}

} // namespace StreamServer
} // namespace El